package pandora.bo.DCC;

import java.util.Date;
import java.util.List;

import pandora.bo.login.DBLogin;
import pandora.data.IAccountDAO;
import pandora.data.ICustomerDAO;
import pandora.data.IGenericSearchDAO;
import pandora.data.IProductDAO;
import pandora.data.ISearchDAO;
import pandora.data.IStoreDAO;
import pandora.data.ITypeDAO;
import pandora.data.mysql.JDBCAccountDAO;
import pandora.data.mysql.JDBCCustomerDAO;
import pandora.data.mysql.JDBCGenericSearchDAO;
import pandora.data.mysql.JDBCProductDAO;
import pandora.data.mysql.JDBCSearchDAO;
import pandora.data.mysql.JDBCStoreDAO;
import pandora.data.mysql.JDBCTypeDAO;
import pandora.dto.ProductDTO;
import pandora.dto.TypeDTO;

public class TesteoDCC {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ISearchDAO sDAO = new JDBCSearchDAO();
		ICustomerDAO cDAO = new JDBCCustomerDAO();
		IGenericSearchDAO gsDAO = new JDBCGenericSearchDAO();
		IProductDAO pDAO = new JDBCProductDAO();
		ITypeDAO tDAO = new JDBCTypeDAO();
		IAccountDAO aDAO = new JDBCAccountDAO();
		IStoreDAO stDAO = new JDBCStoreDAO();
		
		//PRUEBAS DE VERIFICACIÓN DE USUARIOS
		DBLogin dbl = new DBLogin();
		if(dbl.login("store", "store")){
			System.out.println("El usuario es store");
		}
		if(dbl.login("customer", "pepe")){
			System.out.println("El usuario es customer");
		}else{
			System.out.println("El usuario NO es valido");
		}
		
		//PRUEBAS PARA BÚSQUEDAS ESPECÍFICAS
		System.out.println("OID de la tienda con NIF 00000047R: "+stDAO.selectStoreOIDByNIF("00000047R"));
		System.out.println("OID del DNI 00000001R: "+cDAO.selectCustomerOIDByDNI("00000001R"));
		System.out.println("OID del codigo de barras 1234567890987: "+pDAO.selectOIDOfProduct("1234567890987"));
		//Contar cuantas veces ha buscado el consumidor con DNI 00000001R el producto con codigo de barras 1234567890987
		Integer count = sDAO.countSearchedCustomerProduct("00000001R", "1234567890987");
		System.out.println("El consumidor con DNI 00000001R ha buscado el producto 1, "+count+" veces");
		//Debe dar 2 -> OK ^^
		
		
		//Lista todos los productos que ha buscado el consumidor con DNI 00000001R
		List<ProductDTO> l = sDAO.selectAllSearchedCustomerProducts("00000001R");
		System.out.println("Productos que ha buscado el consumidor con DNI 00000001R:");
		for(ProductDTO p : l){
			System.out.println(p.getBarcode()+" "+p.getProductName()+" "+p.getProductDetails()+" "+p.getBrand().getBrandName()+" "+p.getType().getType());
		}
		//Debe salir 2 veces la leche Carrefour -> OK ^^
		
		
		
		//PRUEBAS PARA BÚSQUEDAS GENÉRICAS
		
		List<TypeDTO> li = gsDAO.selectAllSearchedCustomerTypes("00000002W");
		System.out.println("Tipos que ha buscado el consumidor con DNI 00000002W:");
		for(TypeDTO t : li){
			System.out.println(t.getType()+" "+t.getParentType().getType());
		}
		
		//Contar cuantas veces ha buscado el consumidor con DNI 00000002W el tipo Leche
		TypeDTO t = tDAO.selectTypeByOID("2");
		count = gsDAO.countSearchedCustomerType("00000002W", t);
		System.out.println("El consumidor con DNI 00000002W ha buscado el tipo Leche, "+count+" veces");
		//Debe dar 1 -> OK ^^
		
		//Prueba de mi BOs
		CustomerStats custStats = null;
		custStats = new CustomerStats("00000001R");
		if(custStats!=null)
			System.out.println("Estadísticas de usuario creadas");
		
		List<ProductPar> msp = custStats.mostSearchedProducts();
		
		
		for(ProductPar pp: msp){
			System.out.println(pp.toString());
		}
		
		String sDate1 = "1/1/1970";
		String sDate2 = "25/5/2010";

		String[] sArray1 = sDate1.split("/");
		String[] sArray2 = sDate2.split("/");
		Date date1 = new Date(new Integer(sArray1[2])-1900,new Integer(sArray1[1])-1,new Integer(sArray1[0]));
		Date date2 = new Date(new Integer(sArray2[2])-1900,new Integer(sArray2[1])-1,new Integer(sArray2[0]));
		
		System.out.println(date1.toString());
		System.out.println(date2.toString());
		System.out.println(date1.getTime());
		System.out.println(date2.getTime());
		
		System.out.println("PRUEBAS DE BÚSQUEDAS CON FECHAS");
		List<ProductDTO> l3 = sDAO.selectAllSearchedCustomerProductsBetween("00000001R", date1, date2);
		for(ProductDTO p: l3){
			System.out.println(p.getBarcode()+" "+p.getProductName());
		}
	}

}
